package tools;


import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * 信号量
 * 有增有减
 * 1、用于多个共享资源的互斥使用
 * 2、用于控制并发线程的数量
 */
public class SemaphoreDemo {
    public static void main(String[] args) throws Exception{
        Semaphore semaphore = new Semaphore(3);

        for(int i = 0;i <= 6;i++){
            new Thread(() -> {
                try{
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName()+"\t抢到车位");
                    try{
                        TimeUnit.SECONDS.sleep(3);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"\t停3秒后离开车位");
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    semaphore.release();
                }
            },String.valueOf(i)).start();
        }
    }
}
